class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @return string字符串vector
     */
    set<string> st;
    bool vis[20]={false};
    vector<string> Permutation(string str) {
        if(str=="") return vector<string>({""});
        for(int i=0;i<str.size();i++)
        {
            memset(vis,false,sizeof(vis));
            vis[i]=true;
            string s;
            s+=str[i];
            dfs(str,s);
        }
        vector<string> ss;
        for(auto& e:st)
        {
            ss.push_back(e);
        }
        return ss;
    }
    void dfs(const string& s,string result)
    {
        if(result.size()==s.size()){
            st.insert(result);
            return;
        }
        for(int i=0;i<s.size();i++)
        {
            if(!vis[i]){
                vis[i]=true;
                dfs(s,result+s[i]);
                vis[i]=false;
            }
        }
    }
};